package com.example.service;

import java.util.Map;

import org.springframework.transaction.annotation.Transactional;

import com.example.entity.SecurityTipRecord;
import com.example.ext.entity.ExtPromotionRecord;

/**
 * Created by douyx on 2018/03/18.
 */
public interface PromotionService {

	/**
	 * 阅读安全提示加积分
	 * 
	 * @param map
	 *            userId: 用户编号
	 *            type: 3 电梯安全管理员 4 维保员
	 *            tipId: 安全提示编号
	 * @return
	 */
	Map<String, Object> addEmpiricByReadTip(SecurityTipRecord securityTipRecord);
	
	/**
	 * 上传1份电梯安全管理制度中的资料
	 * 
	 * @param map
	 *            type: 1 维保单位 2 物业单位
	 *            partyId: 单位编号
	 *            empiricValue: 经验值
	 *            content: 加分项目
	 * @return
	 */
	Map<String, Object> addByUpload(Map<String, Object> map);

	/**
	 * 上传专业证书加经验
	 * 
	 * @param map
	 *            type: 3 电梯安全管理员 4 维保员 userId: 用户编号
	 * @return
	 */
	Map<String, Object> addEmpiricByCert(Map<String, Object> map);

	/**
	 * 监管部门打分
	 * 
	 * @param map
	 *            type: 1 维保单位 2 物业单位
	 *            partyId: 单位编号
	 *            empiricValue: 经验值
	 * @return
	 */
	Map<String, Object> addEmpiric(Map<String, Object> map);

	/**
	 * 用户转移经验同步转移
	 * 
	 * @param map
	 *            userId: 用户编号 (必输)
	 *            type: 3 电梯安全管理员 4 维保员  (必输)
	 *            partyIdBfr: 转移前机构编号 (必输)
	 *            partyTypeBfr: 1 维保单位 2 物业单位  (必输)
	 *            partyIdAft: 转移后机构编号 (必输)
	 *            partyTypeAft: 1 维保单位 2 物业单位  (必输)
	 * @return
	 */
	Map<String, Object> empiricTrans(Map<String, Object> map);

	/**
	 * 查询成就及经验值
	 * 
	 * @param map
	 *            type: 1 维保单位 2 物业单位 3 电梯安全管理员 4 维保员 userId: 用户编号/单位编号
	 * @return
	 */
	Map<String, Object> query(Map<String, Object> map);

	/**
	 * 排行榜查询
	 * 
	 * @param map
	 *            type: 排名维度：1 维保单位 2 物业单位 3 电梯安全管理员 4 维保员 (必输) userId:
	 *            用户编号/单位编号 parentId: 需要查询下辖排行的区域单位编号(必输)
	 * @return userName: 用户名称 ranking: 排名 partyName: 单位名称 empiricValue: 经验值
	 *         grade: 等级 (单位无此字段) achieve: 成就 (单位无此字段) rankings:
	 *         排名列表（List<Map<String, Object>> 前十名 Map中包含上述字段）
	 */
	Map<String, Object> queryRanking(Map<String, Object> map);

	/**
	 * 排行榜查询
	 * 
	 * @param map
	 *            type: 排名维度：1 维保单位 2 物业单位 3 电梯安全管理员 4 维保员 (必输)
	 * @return rankings: 排名列表（List<Map<String, Object>> 前十名 ） userName: 用户名称
	 *         ranking: 排名 partyName: 单位名称 empiricValue: 经验值 grade: 等级 (单位无此字段)
	 *         achieve: 成就 (单位无此字段)
	 */
	Map<String, Object> queryRanks(Map<String, Object> map);

	/**
	 * 查询加分记录
	 * 
	 * @param map
	 *            type: 1 维保单位 2 物业单位 3 电梯安全管理员 4 维保员 (必输)
	 *            userId: 用户编号/单位编号(必输)
	 *            addedTimeFrom: 加分时间开始(可选)
	 *            addedTimeTo: 加分时间结束(可选)
	 * @return PromotionRecord
	 */
	Map<String, Object> queryRecord(ExtPromotionRecord promotionRecord);
}
